package com.azxcrm.project.system.order.service;

import java.util.List;

import com.azxcrm.project.system.order.domain.Order;
import com.azxcrm.project.system.order.domain.OrderAudit;
import com.azxcrm.project.system.order.domain.OrdersSet;

/**
 * 订单 服务层
 * 
 * @author Dustyone
 * @date 2018-09-11
 */
public interface IOrderService 
{

	/**
     * 查询订单信息
     * 
     * @param orderId 订单ID
     * @return 订单信息
     */
	 Order selectOrderById(Integer orderId);
	 
	 /**
     * 查询订单信息
     * 
     * @param order 订单信息
     * @return 订单信息
     */
	Order selectOrderByOrder(Order order);


	/**
	 * 查询订单列表
	 * 
	 * @param order 订单信息
	 * @return 订单集合
	 */
	List<Order> selectOrderList(Order order);
	
	/**
     * 查询待审核订单列表
     * 
     * @param order 订单信息
     * @return 订单集合
     */
	List<Order> selectOrderAuditList(Order order);
	
	/**
	 * 查询待跟进订单列表
	 * 
	 * @param order 待跟进订单信息
	 * @return 待跟进订单集合
	 */
	List<Order> selectOrderFollowList(Order order);
	
	/**
	 * 根据部门id查询部门待分配订单条数
	 * @param deptId
	 * @return
	 */
	int selectOrderCount(Integer deptId);

	/**
     * 新增订单
     * 
     * @param order 订单信息
     * @return 结果
     */
	 int insertOrder(Order order);
	
	/**
     * 修改订单
     * 
     * @param order 订单信息
     * @return 结果
     */
	 int updateOrder(Order order);
	
	 /**
	 * 根据订单ID修改订单状态
	 * @param Order
	 * @return
	 */
	int updateOrderStatusById(Order Order);
	 
	/**
     * 保存订单
     * 
     * @param order 订单信息
     * @return 结果
     */
	 int saveOrder(Order order);
	
	/**
     * 删除订单信息
     * 
     * @param orderId 订单ID
     * @return 结果
     */
	 int deleteOrderById(Integer orderId);
	
	/**
     * 批量删除订单信息
     * 
     * @param orderIds 需要删除的数据ID
     * @return 结果
     */
	 int batchDeleteOrder(Integer[] orderIds);
	
	 /**
	  * 审核订单
	  * @param orderAudit
	  * @return
	  */
	 int auditOrder(OrderAudit orderAudit);
	 
	 /**
	 * 查询新增后最新的记录
	 * @return
	 */
	 Order selectOrder();
	 
	 /**
	  * 创建订单
	  * @return
	  */
	 int foundOrder(OrdersSet ordersSet);
	 
	 /**
	  * 发起退单
	  * @param ordersSet
	  * @return
	  */
	 int flowOrderDeal(OrdersSet ordersSet);
	 
	 /**
	  * wap发起退单
	  * @param ordersSet
	  * @return
	  */
	 int wapFlowOrderDeal(Order order);
	 
	 /**
	 * 查看指定产品是否被订单引用
	 * @param productId
	 * @return
	 */
	boolean checkProductCasecaded(Integer productId);
	
	/**
	 * 查看指定线索是否被订单引用
	 * @param clueId
	 * @return 结果true:已被引用；false未被引用
	 */
	boolean checkCustomerClueCasecaded(Integer clueId);
	
	/**
	 * 统计当前月份业务员的订单数
	 * @param Order
	 * @return
	 */
	 Order countOrderById(Order Order);
	 
	 /**
	 * wap统计当前业务员的总订单数和价格
	 * @param Order
	 * @return
	 */
	 Order countOrder(Order Order);
	 
	 /**
	 * 根据业务员手机号查询用户的派单记录
	 * @param order
	 * @return
	 */
	 List<Order> selectOrderByPhone(Order order);
	 
	 /**
	  * 根据产品类型统计不同状态下的订单数量
	  * @param typeId
	  * @return 
	  */
	 List<Order> selectStatusCount(Integer typeId); 
	 
	 /**
	  * 根据产品类型统计不同状态下的订单数量总合
	  * @return 
	  */
	 List<Order> selectSumStatusCount();
	 
	 /**
	  * 根据订单id查询待处理订单详情
	  * @param orderId
	  * @return
	  */
	 Order selectOrderByOrderId(Integer orderId);
}
